// const moment = require("moment");
// const fs = require("fs");
const { logFilePath } = require("@/config/index");
// // 写入日志
// const writeLog = (logMessage) => {
//   fs.appendFileSync(
//     logFilePath,
//     `${moment().format("YYYY-MM-DD HH:mm:ss")} - ${logMessage}\n`
//   );
// };
// module.exports = writeLog;
console.log("-------",logFilePath)
const { createLogger, format, transports } = require("winston");
 
const logger = createLogger({
  // level 表示日志级别  例如 info warn error 等
  // 默认info级别 低于info级别的日志不会显示
  level: "info",
  //  format 日志格式 例如 json格式
  format: format.json(),
 
  // defaultMeta 表示日志的元数据 例如 服务名称
  defaultMeta: { service: "文件服务" },
 
  // transports 表示日志的输出方式 例如 输出到文件 输出到控制台
  transports: [
    // 输出到error.log文件 级别为error（error fatal）
    new transports.File({ filename:logFilePath, level: "error" }),
 
    new transports.File({
      filename:logFilePath,
      level: "info",
      format: format.combine(
        format((info) => (info.level === "info" ? info : false))()
      ),
    }),
  ],
});
 
// 如果当前不是生产环境 则将日志输出到控制台
// 格式为 （level: message） json.stringify({ ...rest })
if (process.env.NODE_ENV == "development") {
  logger.add(
    new transports.Console({
      // 使用组合格式
      format: format.combine(
        format.colorize(), // 添加颜色
        format.simple() // simple 为 简洁格式
      ),
    })
  );
}
 
// 添加一些实用的日志方法
const logInfo = (message, meta = {}) => {
  logger.info(message, { timestamp: new Date().toISOString(), ...meta });
};
 
const logError = (message, error, meta = {}) => {
  const errorObj = error instanceof Error ? error : null;
  logger.error(message, {
    timestamp: new Date().toISOString(),
    message: errorObj ? errorObj.message : error.message,
    stack: errorObj ? errorObj.stack : error.message,
    ...meta,
  });
};
 
const logWarn = (message, meta = {}) => {
  logger.warn(message, { timestamp: new Date().toISOString(), ...meta });
};
 
module.exports = {
  logger,
  logInfo,
  logError,
  logWarn,
};
